home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Original Shareware 1.1
/
The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso
/
2
/
qbscreen.zip
/
SCREEN.BAS
< prev
next >
Wrap
BASIC Source File
|
1986-12-16
|
10KB
|
251 lines
REM SCREEN.BAS V1.0 (12/15/86)
REM $INCLUDE: 'LISTING.BAS'
DEFINT A-Z
REM $INCLUDE: 'SUBDIM.BAS'
REM $INCLUDE: 'SHARED.BAS'
SUB CHGATTR (ROW,SCOL,ECOL,ATTR) STATIC
DEF SEG=&H40
REM IF CRT = 1 THEN 40 X 25 COLOR
REM IF CRT = 32 THEN 80 X 25 COLOR
REM IF CRT = 48 THEN MONOCHROME
REM IF CRT = 64 THEN BOTH
CRT = PEEK(&H10)
IF CRT = 48 THEN DEF SEG=&HB000 ELSE DEF SEG=&HB800
PT = ((ROW-1)*160) + ((SCOL-1)*2) + 1
FOR N = 1 TO (ECOL-SCOL+1)
POKE PT+((N-1)*2),ATTR
NEXT N
END SUB
SUB FUNCTIONS (FLD$) STATIC
KEY OFF
FOR N = 1 TO 10
KEY N,""
NEXT N
AB=1 :COL=1 :N=1
LOCATE 25,1 : PRINT SPC(72);
50 WHILE AB<LEN(FLD$)
IF MID$(FLD$,AB,1)="," THEN AB=AB+1 : N=N+1 : GOTO 50
AE=((INSTR(AB,FLD$,","))-AB)
IF AE <= 0 THEN AE=LEN(FLD$)+1-AB
LOCATE 25,COL : COLOR SFG,SBG : PRINT "[F";LEFT$((MKI$(N+48)),1);"]"; : COLOR RFG,RBG : PRINT MID$(FLD$,AB,AE); : COLOR SFG,SBG
L=LEN(MID$(FLD$,AB,AE)) : AB=AB+L+1 : N=N+1 : COL=COL+L+6
WEND
COLOR FG,BG
END SUB
SUB ACCEPT (FLD$,F$) STATIC
CALL LODARG (FLD$,N)
IF LEFT$((ARG$(1)),1) = ";" THEN F$="" : KY=0 : EXIT SUB
YES = NOT NO : NO = NOT YES
IF INSTR(1,ARG$(3),"LCK") THEN KY=0 : EXIT SUB
IF INSTR(1,ARG$(3),"ALP") THEN AP=YES ELSE AP=NO
IF INSTR(1,ARG$(3),"CAP") THEN CP=YES ELSE CP=NO
IF INSTR(1,ARG$(3),"NUM") THEN NM=YES ELSE NM=NO
IF INSTR(1,ARG$(3),"NODEF") THEN DF=NO ELSE DF=YES
IF INSTR(1,ARG$(3),"FIX") THEN FX=YES ELSE FX=NO
IF INSTR(1,ARG$(3),"DEC") THEN DC=YES ELSE DC=NO
IF INSTR(1,ARG$(3),"REV") THEN RV=YES ELSE RV=NO
IF INSTR(1,ARG$(5),"YES") OR EDITMODE=YES THEN ED=YES ELSE ED=NO
IF DC THEN DEF$=" " ELSE DEF$=" "
IF NM AND NOT DC AND DF THEN DEF$="0"
IF NM AND DC AND DF THEN DEF$="0.00"
FL=VAL(ARG$(4))
IF VAL(ARG$(1))<>0 THEN LOCATE VAL(ARG$(1)),VAL(ARG$(2)) ELSE LOCATE ,VAL(ARG$(2))
ON ERROR GOTO INPERR
GOSUB GETINP
ON ERROR GOTO 0
EXIT SUB
GETINP:
REM F$ = FIELD/PROMPT TO BE DISPLAYED
REM FL = FIELD LENGTH
REM WL = CHARACTER COUNT
REM WI = COLUMN POINTER
REM QY = CURRENT LINE
REM QX = CURRENT COLUMN
REM DP = DECIMAL COUNT
REM ES = ERROR SWITCH
REM W$ = INPUT CHARACTER
REM KY = FUNCTION/CONTROL KEY ENTERED
100 DP=0: WL=0: WI=1: IN$=INKEY$ : TRANSFER=NO : BYTS!=FRE("")
QX= POS(0): QY=CSRLIN
IN$= SPACE$(FL)
IF NOT DF THEN 590
IF F$="" OR F$=SPACE$(FL+DC) THEN 490
IF NOT DC THEN 470
IN$=LEFT$(F$,FL-3)+"."+RIGHT$(F$,2) : WL=LEN(IN$) : GOTO 490
470 IN$= LEFT$(F$+SPACE$(FL),FL): WL=LEN(F$)
480 IF MID$(IN$,WL,1)=" " THEN WL=WL-1: IF WL>0 THEN 480
490 IF RV THEN COLOR RFG,RBG ELSE COLOR FG,BG
LOCATE QY,QX,1: PRINT IN$;
510 LOCATE QY,QX+WI-1
520 W$=INKEY$: DEF SEG=&H40: QK=PEEK(&H17) AND 96:
IF QK1<>QK THEN LOCATE 25,73: COLOR RFG,RBG : PRINT LOCKS$(QK/32);: QK1=QK: SOUND 400+QK,.3: GOTO 590
IF DATSW THEN CALL DISDATE
IF W$="" THEN 520
KY=0
IF ES THEN LOCATE 24,1 : PRINT SPC(40); : COLOR FG,BG : LOCATE QY,QX+WI-1 : ES=NO : IF RV THEN COLOR RFG,RBG
IF LEN(W$)=1 THEN 660 ELSE KY= ASC(RIGHT$(W$,1))
IF KY>=F1 AND KY<=F10 THEN RETURN
IF KY= CTRL.RT THEN 860
IF KY= CTRL.LF THEN 860
IF KY= PG.UP THEN 860
IF KY= PG.DN THEN 860
IF NOT AP THEN 520
IF KY= INS.KEY THEN IF INSERT=NO THEN INSERT=YES: LOCATE,,,CU1,CU2: GOTO 490 ELSE INSERT=NO: LOCATE,,,CU2: GOTO 520
IF KY= RT.CURSOR THEN WI=WI-(WI<(WL+1)): GOTO 510
IF KY= LF.CURSOR THEN WI=WI+(WI> 1): GOTO 510
IF KY= DEL.KEY THEN IF WL<>0 AND WI<=FL AND WL>=WI THEN IN$= LEFT$(IN$,WI-1)+RIGHT$(IN$,FL-WI)+" ": WL=WL-1: GOTO 490
IF INSERT THEN INSERT=NO: LOCATE,,,CU2
IF KY= CTRL.HOME THEN WI=1: GOTO 510
IF KY= CTRL.END THEN WI= WL+1: GOTO 510
IF KY= HOME THEN IN$=LEFT$(IN$,WI-1)+SPACE$(FL-WI+1): WL=WI-1: GOTO 490
GOTO 510
590 IF RV THEN COLOR RFG,RBG ELSE COLOR FG,BG
GOTO 510
660 IF W$= NTR$ THEN 860
IF W$= ESC$ THEN KY=ESC : GOTO 940
IF WI>FL THEN IF W$<> BKSP$ THEN ERROR 101 : GOTO 510
730 IF AP AND NOT CP THEN IF W$>=" " AND W$<="~" THEN 750
IF NM THEN IF W$>="0" AND W$<="9" THEN 750
IF NM THEN IF WI=1 AND W$="-" THEN 750
IF DC THEN IF W$="." AND DP=0 THEN DP=1 : GOTO 770
IF AP AND CP THEN IF W$>="a" AND W$<="z" THEN W$=CHR$(ASC(W$)-32): GOTO 750 ELSE IF W$>=" " AND W$<"a" THEN 750
IF W$=BKSP$ THEN IF WI>1 THEN IN$=LEFT$(IN$,WI-2)+RIGHT$(IN$,FL-WI+1)+" ": WL=WL-1: WI=WI-1: DP=DP+(DP>0):LOCATE ,QX+WI-1: PRINT " ";: GOTO 510
IF NM THEN IF W$<>BKSP$ THEN ERROR 103
GOTO 510
750 IF NOT DC THEN 770 ELSE IF DP=0 AND W$<>"." AND WI=FL-2 THEN 520
IF DP=0 THEN 770 ELSE IF DP=3 THEN 520 ELSE DP=DP+1
770 IF NOT INSERT THEN MID$(IN$,WI,1)=W$: TRANSFER=YES : GOTO 790
IF WL < FL THEN WL=WL+1: IN$= LEFT$( LEFT$(IN$,WI-1) +W$ +RIGHT$(IN$,FL-WI+1), FL): WI=WI+1 : TRANSFER=YES : GOTO 490 ELSE 520
790 IF WI>1 THEN 820
IN$=W$+SPACE$(FL-1) : IF W$<>"." THEN DP=0
LOCATE,QX: PRINT IN$;: LOCATE,QX: WL=1
820 PRINT W$;
WI=WI+1: IF WI>WL THEN WL=WI-1
IF FL>1 OR WL<FL THEN 520
860 COLOR FG,BG: LOCATE QY,QX,,CU2: INSERT=NO
IF KY<>0 THEN 960
IF WL=0 AND NOT ED THEN ERROR 102 : GOTO 510
IF FX AND WL<>0 AND WL<FL THEN ERROR 104 : GOTO 510
IF NOT TRANSFER AND ((WL=0 AND EDITMODE) OR (WL<>0)) THEN 950
IF DC THEN 900
IF NM THEN 930
IN$= LEFT$(IN$+SPACE$(FL),FL): GOTO 935
900 WHILE LEFT$(IN$,1)="0"
IN$=RIGHT$(IN$,FL-1)+" " : WL=WL-1
WEND
IF WL>0 THEN IN$=LEFT$(IN$,WL)+MID$(".00",DP+1,3-DP) ELSE IN$=DEF$ : WL=4 : DP=3
IN$=SPACE$(FL-WL-(3-DP))+IN$: PRINT IN$;
IN$=LEFT$(IN$,FL-3)+RIGHT$(IN$,2): F$=IN$ : RETURN
930 WHILE LEFT$(IN$,1)="0"
IN$=RIGHT$(IN$,FL-1)+" " : WL=WL-1
WEND
IF WL>0 THEN IN$=SPACE$(FL-WL)+LEFT$(IN$,WL) ELSE IN$=SPACE$(FL-1)+DEF$
935 F$=IN$
940 PRINT IN$;
950 RETURN
960 IF WL<>0 AND F$="" THEN 510
IF KY<>CTRL.LF AND NOT ED THEN ERROR 102 : GOTO 510
IN$= SPACE$(FL)
IF F$="" THEN 940
IF NOT DC THEN 970
IF F$<>SPACE$(FL-1) THEN IN$=LEFT$(F$,FL-3)+"."+RIGHT$(F$,2) : GOTO 940
970 IN$= LEFT$(F$+SPACE$(FL),FL) : GOTO 940
END SUB
INPERR:
CALL DISERR (ERR,ER$)
RESUME NEXT
SUB DISERR (EN,ER$) STATIC
COLOR HL,BG: LOCATE 24,1 : PRINT SPC(40); : BEEP : ES=YES : LOCATE ,1
IF EN<100 THEN PRINT "BASIC ERROR ="EN "LINE ="ERL;
IF EN>200 THEN COLOR BL : PRINT ER$;
IF EN=101 THEN PRINT "<<FIELD OVERFLOW>>";
IF EN=102 THEN PRINT "<<CAN'T OMIT>>";
IF EN=103 THEN PRINT "<<NON-NUMERIC>>";
IF EN=104 THEN PRINT "<<FIXED LENGTH INPUT>>";
IF EN=105 THEN PRINT "<<INVALID NUMBER>>";
IF EN=106 THEN PRINT "<<ENTRY ***VOIDED*** >>";
IF EN=111 THEN PRINT "[RECORD NOT FOUND]";
IF EN=112 THEN PRINT "[END OF FILE]";
IF EN=113 THEN PRINT "[PARTIAL MATCH FOUND]";
IF EN=115 THEN PRINT "[INSUFFICIENT KEY INPUT]";
COLOR FG,BG
END SUB
SUB ASKUM (QUEST$,ANS$) STATIC
COLOR HL,BG : LOCATE 24,1 : PRINT SPC(80); : BEEP
PRINT QUEST$;"? [Y,N] <DEFAULT=N>:";
ANS$=""
WHILE ANS$=""
ANS$=INKEY$
WEND
LOCATE 24,1 : PRINT SPC(80);
IF (ANS$<>"Y" AND ANS$<>"y") THEN ANS$="N"
COLOR FG,BG
END SUB
SUB DISDATE STATIC
STATIC TIM$
IF LEFT$(TIM$,5)=LEFT$(TIME$,5) OR NOT DATSW THEN EXIT SUB
CX=CSRLIN : CY=POS(0)
DAT$=DATE$:TIM$=TIME$:X=VAL(TIM$):IF X>11 THEN CH$=" pm":X=X\13+X MOD 13 ELSE CH$=" am":IF X=0 THEN X=12
MSG$="Date: "+MID$("JanFebMarAprMayJunJulAugSepOctNovDec",3*VAL(DAT$)-2,3)+STR$(VAL(MID$(DAT$,4)))+", "+RIGHT$(DAT$,4)+" Time:"+STR$(X)+MID$(TIM$,3,3)+CH$
COLOR HL,BG : LOCATE 1,22 : PRINT MSG$; : LOCATE CX,CY : COLOR FG,BG
END SUB
SUB DISPBIN (FLD$,BDATA,BUMP) STATIC
DATA$=STR$(BDATA)
CALL DISPLAY (FLD$,DATA$,BUMP)
END SUB
SUB DISPLAY (FLD$,DATA$,BUMP) STATIC
CALL LODARG (FLD$,N)
IF LEFT$((ARG$(1)),1) = ";" THEN EXIT SUB
LOCATE VAL(ARG$(1))+BUMP,VAL(ARG$(2))
IF INSTR(1,ARG$(3),"BLINK") THEN COLOR BL,BG
IF INSTR(1,ARG$(3),"REV") THEN COLOR RFG,RBG
IF INSTR(1,ARG$(3),"HIGH") THEN COLOR HL,BG
IF DATA$="" THEN PRINT ARG$(4) : COLOR FG,BG : EXIT SUB
YES = NOT NO : NO = NOT YES
IF INSTR(1,ARG$(3),"ALP") THEN AP=YES ELSE AP=NO
IF INSTR(1,ARG$(3),"BIN") THEN BN=YES ELSE BN=NO
IF INSTR(1,ARG$(3),"NUM") THEN NM=YES ELSE NM=NO
IF INSTR(1,ARG$(3),"DEC") THEN DC=YES ELSE DC=NO
FL=VAL(ARG$(4))
IF BN THEN PRINT RIGHT$(SPACE$(FL)+DATA$,FL);
IF DC AND DATA$=SPACE$(FL-1) THEN PRINT DATA$; : COLOR FG,BG : EXIT SUB
IF DC THEN PRINT LEFT$(DATA$,FL-3)+"."+RIGHT$(DATA$,2);
IF (NOT DC) AND (NOT BN) THEN PRINT DATA$;
COLOR FG,BG
END SUB
SUB LODARG (FLD$,N) STATIC
AB=1 : AE=1 : N=0
WHILE AE>0
AE=INSTR(AB,FLD$,",")
N=N+1
IF AE>0 THEN ARG$(N) = MID$(FLD$,AB,AE-AB) ELSE ARG$(N) = MID$(FLD$,AB)
AB=AE+1
WEND
END SUB
SUB LODWK1 (FLD$,N) STATIC
AB=1 : AE=1 : N=0
WHILE AE>0
AE=INSTR(AB,FLD$,",")
N=N+1
IF AE>0 THEN WRK1%(N) = VAL(MID$(FLD$,AB,AE-AB)) ELSE WRK1%(N) = VAL(MID$(FLD$,AB))
AB=AE+1
WEND
END SUB
SUB LODWK2 (FLD$,N) STATIC
AB=1 : AE=1 : N=0
WHILE AE>0
AE=INSTR(AB,FLD$,",")
N=N+1
IF AE>0 THEN WRK2%(N) = VAL(MID$(FLD$,AB,AE-AB)) ELSE WRK2%(N) = VAL(MID$(FLD$,AB))
AB=AE+1
WEND
END SUB